package com.example.wiki3.utils;

import com.fasterxml.jackson.databind.ObjectMapper; // 引入Jackson库进行JSON操作

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Map;

public class Tool {

    /**
     * 检查对象是否“空”
     *
     * @param obj 待检查的对象
     * @return true 如果对象为空或满足特定条件下的空，否则false
     */
    public static boolean isEmpty(Object obj) {
        if (obj instanceof String) {
            return obj == null || ((String) obj).trim().isEmpty();
        } else if (obj instanceof Map) {
            return obj == null || ((Map<?, ?>) obj).isEmpty();
        } else if (obj instanceof Collection) {
            return obj == null || ((Collection<?>) obj).isEmpty();
        } else {
            return obj == null;
        }
    }

    /**
     * 非空校验
     *
     * @param obj 待检查的对象
     * @return true 如果对象非空，否则false
     */
    public static boolean isNotEmpty(Object obj) {
        return !isEmpty(obj);
    }

    /**
     * 对象复制
     *
     * @param obj 待复制的对象
     * @return 复制后的对象，如果原对象非空则进行深拷贝，否则返回null
     */
    public static Object copy(Object obj) {
        if (isNotEmpty(obj)) {
            try {
                ObjectMapper mapper = new ObjectMapper();
                return mapper.readValue(mapper.writeValueAsString(obj), obj.getClass());
            } catch (Exception e) {
                throw new RuntimeException("复制对象时发生错误", e);
            }
        }
        return null;
    }

//    /**
//     * 使用递归将列表转换为树形结构
//     * 父ID属性为parent
//     *
//     * @param array  待转换的列表
//     * @param parentId 父节点ID
//     * @return 转换后的树形结构列表
//     */
//    public static <T> List<T> array2Tree(List<T> array, int parentId) {
//        if (array == null || array.isEmpty()) {
//            return new ArrayList<>();
//        }
//
//        List<T> result = new ArrayList<>();
//        for (int i = 0; i < array.size(); i++) {
//            T c = array.get(i);
//            // 假设c对象可以通过getter方法获取parent和id属性
//            int cParent = Integer.parseInt(((YourObjectType) c).getParent()); // 请替换YourObjectType为实际类型
//            int cId = Integer.parseInt(((YourObjectType) c).getId()); // 同上
//
//            if (cParent == parentId) {
//                result.add(c);
//
//                // 递归查找当前节点的子节点
//                List<T> children = array2Tree(array, cId);
//                if (!children.isEmpty()) {
//                    // 假设c对象可以通过setter方法设置children属性
//                    ((YourObjectType) c).setChildren(children); // 同上
//                }
//            }
//        }
//        return result;
//    }
}